* _gtk_css_lookup_resolve:
* @lookup: the lookup
* @context: the context the values are resolved for
+ * @props: a new #GtkStyleProperties to be filled with the new properties
*
* Resolves the current lookup into a styleproperties object. This is done
* by converting from the "winning declaration" to the "computed value".
*
* XXX: This bypasses the notion of "specified value". If this ever becomes
* an issue, go fix it.
- *
- * Returns: a new #GtkStyleProperties
**/
-GtkStyleProperties *
-_gtk_css_lookup_resolve (GtkCssLookup *lookup,
- GtkStyleContext *context)
+void
+_gtk_css_lookup_resolve (GtkCssLookup *lookup,
+ GtkStyleContext *context,
+ GtkStyleProperties *props)
{
- GtkStyleProperties *props;
GtkStyleContext *parent;
guint i, n;
- g_return_val_if_fail (lookup != NULL, NULL);
- g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
+ g_return_if_fail (lookup != NULL);
+ g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+ g_return_if_fail (GTK_IS_STYLE_PROPERTIES (props));
parent = gtk_style_context_get_parent (context);
n = _gtk_css_style_property_get_n_properties ();
- props = gtk_style_properties_new ();
for (i = 0; i < n; i++)
{
&value);
g_value_unset (&value);
}
-
- return props;
}
}
}
- style_data->store = _gtk_css_lookup_resolve (lookup, context);
+ style_data->store = gtk_style_properties_new ();
_gtk_style_properties_set_color_lookup_func (style_data->store,
gtk_style_context_color_lookup_func,
context);
+ _gtk_css_lookup_resolve (lookup, context, style_data->store);
_gtk_css_lookup_free (lookup);
}
gtk_style_context_set_state (context, state);
}
- data = g_hash_table_lookup (priv->style_data, priv->info_stack->data);
+ priv->current_data = g_hash_table_lookup (priv->style_data, priv->info_stack->data);
+ priv->current_state = state;
- if (!data)
+ if (!priv->current_data)
{
GtkWidgetPath *path;
- data = style_data_new ();
- path = create_query_path (context);
-
- build_properties (context, data, path, state);
- build_icon_factories (context, data, path);
-
+ priv->current_data = style_data_new ();
g_hash_table_insert (priv->style_data,
style_info_copy (priv->info_stack->data),
- data);
+ priv->current_data);
+
+ path = create_query_path (context);
+
+ build_properties (context, priv->current_data, path, state);
+ build_icon_factories (context, priv->current_data, path);
gtk_widget_path_free (path);
}
- if (G_UNLIKELY (state_mismatch))
- {
- gtk_style_context_restore (context);
- }
- else
- {
- if (priv->theming_engine)
- g_object_unref (priv->theming_engine);
+ data = priv->current_data;
- gtk_style_properties_get (data->store, 0,
- "engine", &priv->theming_engine,
- NULL);
+ if (priv->theming_engine)
+ g_object_unref (priv->theming_engine);
- if (!priv->theming_engine)
- priv->theming_engine = g_object_ref (gtk_theming_engine_load (NULL));
- }
+ gtk_style_properties_get (priv->current_data->store, 0,
+ "engine", &priv->theming_engine,
+ NULL);
- priv->current_data = data;
- priv->current_state = state;
+ if (!priv->theming_engine)
+ priv->theming_engine = g_object_ref (gtk_theming_engine_load (NULL));
+
+ if (G_UNLIKELY (state_mismatch))
+ gtk_style_context_restore (context);
return data;
}